#ifndef JOUEUR_H
#define JOUEUR_H

#include <QtCore/QFuture>
#include <QtCore/QFutureWatcher>
#include <QtCore/QObject>
#include <QtCore/QString>

#include "plateau.h"

class Joueur : public QObject {
    Q_OBJECT

public:
	Joueur(int pNumero, const QString& pNom);

	virtual int jouer(const Plateau& pEtat) = 0;
	int jouer_t(const Plateau& pEtat);

	inline int nbGraines() const {return m_nbGraines;}
	inline QString nom() const {return m_nom;}
	inline int numero() const {return m_numero;}

	void prendreGraines(int pNbGraines);

public slots:
	void quitter();

signals:
	void grainesPrises(int pNbGraines);

private:
	QString				m_nom;
	int					m_nbGraines;
	int					m_numero;
	QFuture<int>		m_future;
	QFutureWatcher<int>	m_futureWatcher;
};

void waitForSignal(QObject* pObj, const char* pSig);

#endif // JOUEUR_H
